/**
 * @author LYC
 * 文件相关工具函数
 */
import { File, Image, Video, Music, Archive, FileText } from 'lucide-vue-next'
import { useDateFormat, useTimeAgo } from '@vueuse/core'

/**
 * 获取文件对应的图标组件
 * @param type 文件类型
 * @returns 对应的图标组件
 */
export const getFileIcon = (type: string): void => {
  const iconMap: Record<string, any> = {
    image: Image,
    video: Video,
    audio: Music,
    document: FileText,
    archive: Archive
  }
  return iconMap[type] || File
}

/**
 * 获取文件类型的中文名称
 * @param type 文件类型
 * @returns 文件类型的中文名称
 */
export const getFileTypeText = (type: string): string => {
  const typeMap: Record<string, string> = {
    image: '图片',
    video: '视频',
    audio: '音频',
    document: '文档',
    archive: '压缩包'
  }
  return typeMap[type] || '未知'
}

/**
 * 格式化文件大小
 * @param bytes 文件大小（字节）
 * @returns 格式化后的文件大小字符串
 */
export const formatFileSize = (bytes: number): string => {
  if (bytes === 0) return '0 B'
  const k = 1024
  const sizes = ['B', 'KB', 'MB', 'GB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]
}

/**
 * 格式化时间为时:分格式
 * @param date 日期对象或日期字符串
 * @returns 格式化后的时间字符串 (HH:mm)
 * @deprecated 请使用 dateUtils.ts 中的 formatMessageTime 函数
 */
export const formatTime = (date: Date | string): string => {
  return useDateFormat(date, 'HH:mm').value
}

/**
 * 获取文件扩展名
 * @param fileName 文件名
 * @returns 大写的文件扩展名
 */
export const getFileExtension = (fileName: string): string => {
  return fileName.split('.').pop()?.toUpperCase() || ''
}

/**
 * 格式化日期分组显示
 * @param dateStr ISO格式的日期字符串
 * @returns 格式化后的日期显示
 * @deprecated 请使用 dateUtils.ts 中的 getDateGroupLabel 函数
 */
export const formatGroupDate = (dateStr: string): string => {
  const date = new Date(dateStr)
  const today = new Date()
  const yesterday = new Date(today)
  yesterday.setDate(yesterday.getDate() - 1)

  if (dateStr === today.toISOString().split('T')[0]) {
    return '今天'
  } else if (dateStr === yesterday.toISOString().split('T')[0]) {
    return '昨天'
  } else {
    // 使用VueUse的日期格式化
    return useDateFormat(date, 'YYYY年MM月DD日').value
  }
}

/**
 * 获取相对时间（多久之前）
 * @param date 日期对象或日期字符串
 * @returns 相对时间字符串
 * @deprecated 请使用 dateUtils.ts 中的 useRelativeTime 函数
 */
export const getTimeAgo = (date: Date | string): string => {
  const timeAgo = useTimeAgo(date, {
    messages: {
      justNow: '刚刚',
      past: (n) => (n.match(/\d/) ? `${n}前` : n),
      future: (n) => (n.match(/\d/) ? `${n}后` : n),
      month: (n, past) => (n === 1 ? (past ? '上个月' : '下个月') : `${n} 个月`),
      year: (n, past) => (n === 1 ? (past ? '去年' : '明年') : `${n} 年`),
      day: (n, past) => (n === 1 ? (past ? '昨天' : '明天') : `${n} 天`),
      week: (n, past) => (n === 1 ? (past ? '上周' : '下周') : `${n} 周`),
      hour: (n) => `${n} 小时`,
      minute: (n) => `${n} 分钟`,
      second: (n) => `${n} 秒`
    }
  })

  return timeAgo.value
}
